package com.yamibuy.ec.resource.aws;

import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.StrUtil;

import java.io.ByteArrayOutputStream;

/**
 * AWS解码
 *
 * @author: damon.li
 * @version: 2021年02月24日 15:16
 */
public class AwsUrlDecode {

	/**
	 * 解码
	 *
	 * @return 解码后的bytes
	 */
	public static String decode(String url) {
		byte[] bytes = StrUtil.bytes(url, "utf-8");
		if (bytes == null) {
			return null;
		}
		final ByteArrayOutputStream buffer = new ByteArrayOutputStream(bytes.length);
		int b;
		for (int i = 0; i < bytes.length; i++) {
			b = bytes[i];
			if (b == '+') {
				buffer.write('+');
			} else if (b == '%') {
				if (i + 1 < bytes.length) {
					final int u = CharUtil.digit16(bytes[i + 1]);
					if (u >= 0 && i + 2 < bytes.length) {
						final int l = CharUtil.digit16(bytes[i + 2]);
						if (l >= 0) {
							buffer.write((char) ((u << 4) + l));
							i += 2;
							continue;
						}
					}
				}
				// 跳过不符合规范的%形式
				buffer.write(b);
			} else {
				buffer.write(b);
			}
		}
		return StrUtil.str(buffer.toByteArray(), "utf-8");
	}
}
